package group.rober.dataform.handler;

import group.rober.dataform.model.DataForm;

import java.util.Map;

/**
 * 单一记录的查询,保存处理
 * Created by tisir<yangsong158@qq.com> on 2017-05-29
 */
public interface DataSingleHandler<T> {

    /**
     * 创建数据对象之前调用
     * @param dataForm
     * @param queryParameters
     */
    public void beforeCreateDataObject(DataForm dataForm, Map<String,Object> queryParameters);
    /**
     * 详细信息页面创建数据对象
     * @param dataForm
     * @param queryParameters
     * @return
     */
    public T createDataObject(DataForm dataForm, Map<String,Object> queryParameters);
    /**
     * 创建数据对象之前调用
     * @param dataForm
     * @param queryParameters
     * @param dataObject
     */
    public void afterCreateDataObject(DataForm dataForm, Map<String,Object> queryParameters,T dataObject);

    /**
     * 查询之前调用
     * @param dataForm
     * @param queryParameters
     */
    public void beforeQuery(DataForm dataForm, Map<String,Object> queryParameters);
    /**
     * 查询单一数据对象
     * @param dataForm
     * @param queryParameters
     * @return
     */
    public T query(DataForm dataForm, Map<String,Object> queryParameters);

    /**
     * 查询数据之后
     * @param dataForm
     * @param queryParameters
     * @param dataObject
     */
    public void afterQuery(DataForm dataForm, Map<String,Object> queryParameters,T dataObject);

    /**
     * 保存单一数据对象
     * @param dataForm
     * @param data
     * @return
     */
    public T save(DataForm dataForm,T data);

    /**
     * 插入之前
     * @param dataForm
     * @param data
     */
    public void beforeInsert(DataForm dataForm,T data);

    /**
     * 插入之后
     * @param dataForm
     * @param data
     */
    public void afterInsert(DataForm dataForm,T data);

    /**
     * 插入之前
     * @param dataForm
     * @param data
     */
    public void beforeUpdate(DataForm dataForm,T data);

    /**
     * 插入之后
     * @param dataForm
     * @param data
     */
    public void afterUpdate(DataForm dataForm,T data);

    /**
     * 删除之前
     * @param dataForm
     * @param data
     */
    public void beforeDelete(DataForm dataForm,T data);
    /**
     * 删除单一数据对象
     * @param dataForm
     * @param data
     * @return
     */
    public Integer delete(DataForm dataForm,T data);
    /**
     * 删除之后
     * @param dataForm
     * @param data
     */
    public void afterDelete(DataForm dataForm,T data);
}
